// Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import React, { createContext, useCallback, useContext, useRef } from 'react';

const FocusContext = createContext();

export function FocusProvider({ children }) {
  const commentInfoRef = useRef(null);

  const registerCommentRef = useCallback((info) => {
    commentInfoRef.current = info;
  }, []);

  const focusComment = useCallback((value) => {
    if (commentInfoRef.current) {
      const { ref, setValue } = commentInfoRef.current;
      ref.current?.focus();
      setValue(value);
    }
  }, []);

  return (
    <FocusContext.Provider value={{ registerCommentRef, focusComment }}>
      {children}
    </FocusContext.Provider>
  );
}

export function useFocusContext() {
  return useContext(FocusContext);
}